<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // 回调函数 将一个函数当作参数传入另一个函数
    // 对象的原型链指向构造函数的原型 一直到null为止
    // obj.__proto__ → fn.prototype
    function fn1(x) {
        x(77)
    }

    fn1(function (data) {
        console.log(data)
    })

    // 封装循环方法
    var arr = [1, 2, 3, 4, 5, 6, 7]
    Array.prototype.myforEach = function (fn) {
        // fn("千束", "泷奈")
        for (var i = 0; i < this.length; i++) {//这里this指向调用它的对象（arr）
            fn(this[i], i)//循环arr数组  v拿其值，i拿其下标
        }
    }
    arr.myforEach(function (v, i) {
        console.log(v, i)
    })


    // reduce  和  可以设置默认值  prev上一项 next下一项
    let x = arr.reduce(function (p = 0, n) {
        return p += n
    })
    console.log(x)
</script>

</html>